我的學生前些日子突然腦洞爆發,問我:“存滿資料的硬碟是不是比空硬碟重?資料是否有重量?”
我也查了大量的資料,也和朋友老狼做了持續的辯論。所以這裡簡單的介紹一下:簡單來說就是存了資料後,硬碟只有磁級變化,質量不變;而SSD因為鎖住了更多的電子元件(但要記住,是0變多了,而不是1 ),所以變重了,儘管只有幾乎可以忽略的一點點!
我先將硬碟分為傳統磁介質硬碟和固體硬碟兩種,兩種硬碟有不同的答案。和他不同的是,我希望從空硬碟什麼樣,存滿資料的硬碟什麼樣的角度來推導出結論。
空硬碟什麼樣?
大家買回去的硬碟上面什麼也沒有,還需要重新分區等等操作,是不是硬碟上面就空空如也,什麼也沒有呢?其實並不是。
磁介質硬碟出廠時做過低級格式化,拿到用戶的手上時已經被寫入柱面、磁道、扇區等等信息,在沒有內容的數據區,都被磁化成0的內容。所以空機械硬碟是絕大部分為0內容,很小部分為資料(假設0,1參半)。
SSD存儲介質採取NAND Flash。為了簡化起見,我們只討論SLC。MLC/TCL/QLC也類似,並不影響結果。空的SSD出廠前已經被寫入原始的FTL映射表,空閒塊也已經被預擦除(不是必須,結果一樣)。和卓克認為的不一樣,被擦除後是全1,也就是說空SSD是絕大部分是1,很小部分是資料(也假設0,1參半)。
存滿資料後有什麼變化?
為了簡化起見,我們假設存滿的資料也都是0,1參半。那麼存滿資料後硬碟發生了什麼變化呢?
磁介質硬碟資料是通過調整磁介質磁極方向來存儲的。卓克的比喻十分形象,這裡借用一下:機械硬碟是一個筐子,磁介質是裡面放的很多香蕉。0是香蕉把朝北,1是香蕉把朝南。存滿資料就相當於,原來香蕉把都朝北,現在一半朝北一半朝南。請問筐子重量會不會變化呢?當然不會!
SSD的NAND Flash存儲,卓克認為是測量被囚禁在浮動柵(Float Gate)裡面的電子的數量,大於100就是1,小於就是0。因為電子有質量,因為空的SSD以前都是0,現在被囚禁了很多電子,導致0,1參半,所以會重一點點。但是我們前面提到,空SSD實際上絕大部分是1,存滿資料實際上是0變多了,那是不是意味著存滿資料,SSD變輕了呢?
實際上,是會重一點。卓克犯了兩個錯誤,負負的正,結論反倒是正確的。實際上存0比存1重,所以SSD會變重點。那麼為什麼存0反倒比存1重呢?這要從NAND Flash的存儲原理說起。
閃存的工作原理
閃存的基本原理在1980年代之後基本就沒有變化過。它的構成和場效應管(MOSFET)十分類似:
它由:源極(Source)、漏極(Drain)、浮動柵(Float Gate)和控制柵(Control Gate)組成。相對場效應管的單柵極結構,閃存是雙柵極結構。浮動柵是由氮化物夾在二氧化矽材料(Insulator)之間構成。
在控制柵加正電壓,將電子(帶負電)吸入浮動柵。在此後,由於浮動柵上下的二氧化矽材料並不導電,這些電子被囚禁(Trap)在浮動柵之中,出不去了。這樣無論今後控制柵電壓有否,這個狀態都會保持下去,所以閃存可以掉電保存資料。注意寫操作完畢後,該閃存單元存儲的是0,後面我們將會介紹為什麼。
我們的擦除操作(Erase)剛好相反:
在源極加正電壓利用浮空柵與漏極之間的隧道效應,將注入到浮空柵的負電荷吸引到源極,排空浮動柵的電子。這時讀取的狀態是1。
那為什麼有電子是0,沒電子是1呢?以為讀取的時候,需要給控制柵加一個低的讀取電壓,對於被Program過的閃存單元來說,被囚禁的電子可以抵消該讀取電壓,造成源極和漏極之間是處於被關閉的狀態:
如果是被擦除過的就剛好相反,源極和漏極在控制柵的低電壓作用下,處於導通狀態:
也就是說通過向控制柵加讀取電壓,判斷漏極-源極之間是否處於導通狀態來讀取閃存單元的狀態,如果被Program過的,就是處於關閉OFF狀態,為0;而被Erase過的,就是處於導通狀態ON,為1。
總結一下,就是浮動柵(Float Gate)裡面沒有電子,就是1;如果有電子,就是0。因為0有少許電子,比沒有電子的1的狀態要重一些。空的SSD大部分是1,沒有電子;寫滿後0狀態變多了,有了更多的電子,所以重一丟丟。
答疑
今天我就其中思考比較深入的問題統一就我的理解做一個解釋。
Q:好像也不對,雖然局部鎖住了電子,但整體上SSD是電中性的,所以應該也會有些局部的原因抵消了電子的電負性,比如正離子、空穴之類。
Q :這樣會造成電源流出和流入的電子數量不匹配,電荷不守恆了。我猜電子是從襯底中來的,浮柵充電後襯底多了相應數量的空穴。
Q :但是電子帶負電,電子多瞭如果不是本來就在裡面的,那還有別的什麼離子進去啊。
A:總的來說疑問就是多餘的電子從哪裡來?半導體不是電中性嗎?
思考這些問題的同學應該是具有一定的半導體的知識。這很好,我們都知道場效應管(MOSFET)其中雖然分為N型和P型,但整體是電中性的,即正負電荷總數相等。昨天的這幅圖:
讓很多同學認為電荷是從基底/襯底,也就是P型半導體抽上來的,總體電子數量不變,因為電中性。這是因為我為了面向一般受眾,將一些具體的細節沒有提及,難怪產生誤解。下面這個圖應該就比較清楚了:
我們可以看到源極Source和漏極Drain都是N型半導體,基底是P型半導體。與一般MOSFET不同的是,這裡有兩個Gate,他們之前由氧化物絕緣層隔離。
Program(寫0)的過程是這樣:
源極接地,漏極接正電壓,同時在控制gate接正電壓。電子就從源極向漏極流動,在控制gate上電壓足夠高時,電子會穿過氧化物絕緣層(tunneling),被捕獲(trap)在浮動gate中。這個電壓要剛剛好,既要讓電子穿過第一個氧化物絕緣層,又不能讓它們繼續穿過下一個氧化物絕緣層到達控制gate。
看到這裡,相信同學們已經清楚電子從哪裡來的,半導體的電中性怎麼樣了吧。電子是從source的ground來的,沒有東西被電離。電子確確實實是多出來了,它們會被關在那裡,直到下一次越獄的機會。
值得一提的是,電子並不會被永遠關在那裡,如果閒著不動的話,有逃離的機會:
我們的資料存在固態硬碟上安全嗎?
Q:感覺應該是充放電造成電勢能變化,進而E=mc2造成質量變化。
Q:不只有內能,假設內能完全不變,電子從分散到聚集電勢能肯定增加的。磁場排列從無序到有序能量肯定也是增加。
Q:是不是熵增加了?
A: 是勢能發生了變化,從這個角度理解也可以。熵實際上應該是減小了。
Q:要是能做實驗觀測到重量變化就好了哈哈哈哈,原來一直在想這個問題,是不是寫滿了就變重了
A: 這個目前來說沒法做實驗。電子質量是9.10938356 × 10(-31)kg,就算trap了一億個電子,我們的測量儀器還沒有這種靈敏度。其他的干擾因素,如風吹啊,灰塵啊等等帶來的影響就比這增加的一點點質量要高得多。
結論
存滿資料後,機械硬碟只有磁級變化,質量不變;而SSD因為鎖住了更多的電子(但要記住,是0變多了,而不是1),所以變重了,儘管只有幾乎可以忽略的一點點!
生活中真是充滿了各種有趣的意想不到的知識!